#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <string.h>

//消息结构体
struct msg_struct{
    long type;
    char text[128];
};

void handler(int sig)
{
    return;
}

int main(int argc, char *argv[])
{
    int msg_id;
    int key;
    key = ftok("./a.c",1);

    //亲缘进程消息队列
    msg_id = msgget(key, IPC_CREAT | 0777); 
    if(msg_id < 0){
        printf("创建消息队列失败\n");
    }

    //初始化消息
    struct msg_struct msgsend, msgrecv;

    int pid;
    pid = fork();
    if(pid > 0){
        msgsend.type = 100;

        printf("父进程负责发送\n");
        while(1){
            //从键盘获取
            fgets(msgsend.text, 128, stdin);
            //写入信号队列
            msgsnd(msg_id, (const void*)&msgsend, 128, 0);
        }
    }
    else if(pid == 0){
        printf("子进程负责接收\n");
        while(1)
        {
            memset(msgrecv.text,0,128);
            msgrcv(msg_id,(void*)&msgrecv,128,200,0);
            printf("接收到：%s",msgrecv.text);    
        }
    }

    return 0;
}

